<?php

/**
* Класс-контроллер для работы с игровыми аккаунтами
* 
* @author ghostcpp@gmail.com
*/
class AccountController extends FrontEndController
{
    
    public function actions()
    {        
        return array(
            'captcha'=>array(
                'class'=>'CCaptchaAction',
                'backColor'=> 0xE8F4FF,
                'foreColor'=>0x5680A8,
                'maxLength'=> 7,
                'minLength'=> 7, 
                'padding' =>3,
                'width' => 220,
                'height'=> 80,                               
            ),
        );
    }
    
    /**
    * Действие index
    * Выводит страницу со списком игровых аккаунтов пользователя
    */
    public function actionIndex()
    {
        
        $criteria= new CDbCriteria();
        $criteria->select = 'id, name, sid, login_status,
                             enable_login_tick, login_group, 
                             DATEDIFF(s,\'1970-01-01 00:00:00\', last_login_time) AS last_login_time,
                             DATEDIFF(s,\'1970-01-01 00:00:00\', last_logout_time) AS last_logout_time, 
                             last_login_ip,
                             DATEDIFF(s,\'1970-01-01 00:00:00\', enable_login_time) AS enable_login_time, 
                             total_live_time, last_login_mac,
                             ISNULL(ban,0) AS ban, 
                             ISNULL(email,\'\') AS email
                            ';
        $criteria->condition = 'sid = :sid AND
                                ISNULL(ban , 0) = 0';
        $criteria->params = array(':sid' => Y::userId());
        
        $dataProvider = new CActiveDataProvider('AccountLogin', array(
                            'criteria' => $criteria,
                            'pagination' => array(
                                'pageSize' => Y::param('accountsPerPage', 2), 
                            ),
        
        ));
        
        $this->render('index', array('dataProvider' => $dataProvider));
    }
    
    /**
    * Действие view
    * Выводит страницу с просмотром деталей об игровом аккаунте и список персонажей этого аккаунта
    * 
    * @param string $account Название игрового аккаунта
    */
    public function actionView($account)
    {
        $criteria = new CDbCriteria();
        $criteria->select = 'id, name, sid, login_status,
                             enable_login_tick, login_group, 
                             DATEDIFF(s,\'1970-01-01 00:00:00\', last_login_time) AS last_login_time,
                             DATEDIFF(s,\'1970-01-01 00:00:00\', last_logout_time) AS last_logout_time, 
                             last_login_ip,
                             DATEDIFF(s,\'1970-01-01 00:00:00\', enable_login_time) AS enable_login_time, 
                             total_live_time, last_login_mac,
                             ISNULL(ban,0) AS ban, 
                             ISNULL(email,\'\') AS email
                            ';
        $criteria->condition = 'name = :name AND
                                sid  = :sid AND
                                ISNULL(ban , 0) = 0';
        $criteria->params = array(':name' => $account,
                                  ':sid' => Y::userId());

        $model = AccountLogin::model()->find($criteria);
        if(!empty($model))
        {
            $criteria = new CDbCriteria();
            $criteria->select = '*';
            $criteria->condition = 'act_id = :act_id AND
                                    delflag = 0';
            $criteria->params = array(':act_id' => $model->account->act_id);
            
            $dataProvider = new CActiveDataProvider('Character', array(
                                'criteria' => $criteria,
            ));
            
            $this->render('view', array('model' => $model,
                                        'dataProvider' => $dataProvider));
            
        }
        else
            throw new CHttpException(404, 'Аккаунт не найден'); 
    }
    
    /**
    * Действие create
    * Выводит страницу создания (регистрации) нового игрового аккаунта
    */
    public function actionCreate()
    {
        $model = new AccountForm('create');
        
        if(isset($_POST['AccountForm']))
        {
            $model->attributes = $_POST['AccountForm'];
            if($model->validate() && $model->createAccount())
            {
                    $this->render('success', array('action' => 'Создать игровой аккаунт',
                                                   'message' => 'Аккаунт '.$model->name.' успешно создан', 
                                                   ));
                    Y::end();
            }
        }
        
        $this->render('create', array('model' => $model));
    }
    
    /**
    * Действие changePassword
    * Выводит страницу изменения пароля текущего игрового аккаунта
    * 
    * @param string $account Название игрового аккаунта 
    */
    public function actionChangePassword($account)
    {
        $criteria = new CDbCriteria();
        $criteria->condition = 'name = :name AND
                                 sid  = :sid AND
                                 ISNULL(ban , 0)  = 0';
        $criteria->params = array(':name' => $account,
                                  ':sid' => Y::userId());
        
        $model = AccountForm::model()->find($criteria);
        
        if(!empty($model))
        {
            $model->scenario = 'change_password'; 
            
            if(isset($_POST['AccountForm']))
            {
                $model->attributes = $_POST['AccountForm'];
                if($model->validate() && $model->changePassword())
                {
                    $this->render('success', array('action' => 'Сменить пароль от аккаунта ' . $model->name,
                                                   'message' => 'Пароль успешно изменен', 
                                                   ));
                    Y::end();
                }
            }
            
            $this->render('change_password', array('model' => $model));
            
        }
        else
            throw new CHttpException(404, 'Аккаунт не найден');
    }
    
    /**
    * Действие retrievePassword
    * Выводит страницу восстановления пароля от игрового аккаунта
    * 
    * @param string $account Название игрового аккаунта
    */
    public function actionRetrievePassword($account)
      {
        $criteria = new CDbCriteria();
        $criteria->condition = 'name = :name AND
                                sid  = :sid AND
                                ISNULL(ban , 0)  = 0';
        $criteria->params = array(':name' => $account,
                                  ':sid' => Y::userId());
        
        $model = AccountForm::model()->find($criteria);
        
        if(!empty($model))
        {
            $model->scenario = 'retrieve_password';
            
            if(isset($_POST['AccountForm']))
            {
                $model->attributes = $_POST['AccountForm'];
                if($model->validate() && $model->retrievePassword())
                {
                    $this->render('success', array('action' => 'Восстановить пароль от аккаунта ' . $model->name,
                                                   'message' => 'На Ваш адрес электронной почты был выслан новый пароль', 
                                                   ));
                    Y::end();
                }
            }
            
            $this->render('retrieve_password', array('model' => $model));
            
        }
        else
            throw new CHttpException(404, 'Аккаунт не найден');
    }
                             
}
